#include <sys/time.h>
#include <stddef.h>  // NULL
#include <stdlib.h>  // malloc
#include <string.h>  // strlen
#include <stdio.h>   // sprintf / sscanf

long app_common_getCurrentTime() {

    struct timeval tv;

    // 获取当前时间
    gettimeofday(&tv, NULL);

    return tv.tv_sec*1000 + tv.tv_usec/1000;
    // tv_sec: 秒  tv_usec: 微秒
}

// {'a', 'b'} => "6162"
char *app_common_charsToHexstr(char *chars, int chars_len) {
    // 申请16进制字符串空间 hex_str
    char *hex_str = malloc(chars_len*2 + 1);
    // 遍历chars中 每个字符，将其转换2位的16进制字符，并拼接到hex_str中
    for(int i=0;i<chars_len;i++) {
        sprintf(hex_str + i*2, "%02X", chars[i]);
    }
    // 添加字符串结束符
    hex_str[chars_len*2] = '\0';

    // 返回hex_str
    return hex_str;
}

// "6162" =》 {'a', 'b'}
char *app_common_hexstrToChars(char *hexstr, int *chars_len) {

    int hexstr_len = strlen(hexstr);
    *chars_len = hexstr_len / 2;
    // 申请字符数组空间 chars
    char *chars = malloc(*chars_len);
    // 遍历16进制字符串（以2个为u单位），得到对应字符，并拼接到chars中
    for(int i=0;i<hexstr_len;i+=2) {
        sscanf(hexstr + i, "%2X", (unsigned int *)(chars+i/2));
    }
    // 返回chars
    return chars;
}